﻿using System;
using System.ServiceModel;
using System.Security.Permissions;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using System.Collections.Generic;
using Sinacor.Infra.Common.Exceptions.FaultContracts;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract
{
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract", Name = "ITipoAplicacaoPolitica", SessionMode = SessionMode.Required)]
	public interface ITipoAplicacaoPolitica
    {
        #region Members ITipoAplicacaoPolitica

            /// <summary>
            /// Altera os dados de um tipo de aplicação de política.
            /// </summary>
            /// <param name="tipoAplicacaoPolitica"></param>
            [OperationLog]
            [FaultContract(typeof(LicensingFault))]
            [FaultContract(typeof(InvalidSessionFault))]
            [FaultContract(typeof(AccessIsDeniedFault))]
            [FaultContract(typeof(BusinessFault))]
            [FaultContract(typeof(ValidationFault))]
            [FaultContract(typeof(GeneralFault))]
            [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "AlterarTipoAplicacaoPolitica")]
            void AlterarTipoAplicacaoPolitica(DataContract.Request.TipoAplicacaoPoliticaRequest tipoAplicacaoPolitica);

            /// <summary>
            /// Altera os dados de uma lista de tipos de aplicação de política.
            /// </summary>
            /// <param name="tipoAplicacaoPoliticas"></param>
            [OperationLog]
            [FaultContract(typeof(LicensingFault))]
            [FaultContract(typeof(InvalidSessionFault))]
            [FaultContract(typeof(AccessIsDeniedFault))]
            [FaultContract(typeof(BusinessFault))]
            [FaultContract(typeof(ValidationFault))]
            [FaultContract(typeof(GeneralFault))]
            [TransactionRequired]
            [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "AlterarTipoAplicacaoPoliticas")]
            void AlterarTipoAplicacaoPoliticas(List<DataContract.Request.TipoAplicacaoPoliticaRequest> tipoAplicacaoPoliticas);

            /// <summary>
            /// Obtem uma lista de tipos aplicação política existente na base de dados.
            /// </summary>
            [OperationLog]
            [FaultContract(typeof(LicensingFault))]
            [FaultContract(typeof(InvalidSessionFault))]
            [FaultContract(typeof(AccessIsDeniedFault))]
            [FaultContract(typeof(BusinessFault))]
            [FaultContract(typeof(ValidationFault))]
            [FaultContract(typeof(GeneralFault))]
            [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ConsultarTipoAplicacaoPolitica")]
            List<DataContract.Response.TipoAplicacaoPoliticaResponse> ConsultarTipoAplicacaoPolitica(DataContract.Request.FiltroTipoAplicacaoPoliticaRequest filtroTipoAplicacaoPoliticaChave);

            /// <summary>
            /// Exclui um tipo de aplicação de política.
            /// </summary>
            /// <param name="filtroTipoAplicacaoPoliticaChave"></param>
            [OperationLog]
            [FaultContract(typeof(LicensingFault))]
            [FaultContract(typeof(InvalidSessionFault))]
            [FaultContract(typeof(AccessIsDeniedFault))]
            [FaultContract(typeof(BusinessFault))]
            [FaultContract(typeof(ValidationFault))]
            [FaultContract(typeof(GeneralFault))]
            [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ExcluirTipoAplicacaoPolitica")]
            void ExcluirTipoAplicacaoPolitica(DataContract.Request.FiltroTipoAplicacaoPoliticaChaveRequest filtroTipoAplicacaoPoliticaChave);

            /// <summary>
            /// Exclui uma lista de tipos de aplicação de política.
            /// </summary>
            /// <param name="filtroTipoAplicacaoPoliticaChaves"></param>
            [OperationLog]
            [FaultContract(typeof(LicensingFault))]
            [FaultContract(typeof(InvalidSessionFault))]
            [FaultContract(typeof(AccessIsDeniedFault))]
            [FaultContract(typeof(BusinessFault))]
            [FaultContract(typeof(ValidationFault))]
            [FaultContract(typeof(GeneralFault))]
            [TransactionRequired]
            [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ExcluirTipoAplicacaoPoliticas")]
            void ExcluirTipoAplicacaoPoliticas(List<DataContract.Request.FiltroTipoAplicacaoPoliticaChaveRequest> filtroTipoAplicacaoPoliticaChaves);

            /// <summary>
            /// Inclui um novo tipo de aplicação de politica.
            /// </summary>
            /// <param name="tipoAplicacaoPolitica"></param>
            [OperationLog]
            [FaultContract(typeof(LicensingFault))]
            [FaultContract(typeof(InvalidSessionFault))]
            [FaultContract(typeof(AccessIsDeniedFault))]
            [FaultContract(typeof(BusinessFault))]
            [FaultContract(typeof(ValidationFault))]
            [FaultContract(typeof(GeneralFault))]
            [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "IncluirTipoAplicacaoPolitica")]
            void IncluirTipoAplicacaoPolitica(DataContract.Request.TipoAplicacaoPoliticaRequest tipoAplicacaoPolitica);

            /// <summary>
            /// Inclui uma lista de tipos de aplicação de política.
            /// </summary>
            /// <param name="tipoAplicacaoPoliticas"></param>
            [OperationLog]
            [FaultContract(typeof(LicensingFault))]
            [FaultContract(typeof(InvalidSessionFault))]
            [FaultContract(typeof(AccessIsDeniedFault))]
            [FaultContract(typeof(BusinessFault))]
            [FaultContract(typeof(ValidationFault))]
            [FaultContract(typeof(GeneralFault))]
            [TransactionRequired]
            [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "IncluirTipoAplicacaoPoliticas")]
            void IncluirTipoAplicacaoPoliticas(List<DataContract.Request.TipoAplicacaoPoliticaRequest> tipoAplicacaoPoliticas);

            /// <summary>
            /// Obtem um tipo aplicação política existente na base de dados.
            /// </summary>
            [OperationLog]
            [FaultContract(typeof(LicensingFault))]
            [FaultContract(typeof(InvalidSessionFault))]
            [FaultContract(typeof(AccessIsDeniedFault))]
            [FaultContract(typeof(BusinessFault))]
            [FaultContract(typeof(ValidationFault))]
            [FaultContract(typeof(GeneralFault))]
            [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ObterTipoAplicacaoPolitica")]
            DataContract.Response.TipoAplicacaoPoliticaResponse ObterTipoAplicacaoPolitica(DataContract.Request.FiltroTipoAplicacaoPoliticaChaveRequest request);

        #endregion        	
	}
}